package aufgabe13;

/**
 *  Auswertung eines Binomialkoeffizienten ohne Rekursion.
 *  Blatt 4, Aufgabe 13(b), Sommersemester 2013
 */
public class RecursionlessBinomialCoefficient {

    /**
     *  Berechne den Wert eines Binomialkoeffizienten mit Hilfe
     *  eines iterativen Verfahrens unter Verwendung eines Stapels.
     *  Gib zusaetzliche Informationen aus, wenn ein entsprechender
     *  Parameter gesetzt ist. Es erfolgt keine zusaetzliche 
     *  Ueberpruefung der Parameter, da dies bereits im Konstruktor
     *  der Klasse <code>BinomialCoefficient</code> abgefangen wird.
     *  @param n Parameter n fuer den Binomialkoeffizienten
     *  @param k Parameter k fuer den Binomialkoeffizienten
     *  @param print Zusaetzliche Informationen werden genau dann
     *         ausgegeben, wenn dieser Parameter den Wert <code>true</code> hat.
     *  @return berechneter Wert des Binomialkoeffizienten
     */
    public int eval(int n, int k, boolean print) {

	int z = 0;

	/*
	  Hier die eigene Implementierung ergaenzen.
	 */

	return z;


    }

    /**
     *  Ueberpruefe, ob die Methode eval das gleiche Ergebnis
     *  liefert wie <code>BinomialCoefficient.eval</code>.
     *  Gib zusaetzliche Informationen aus, wenn ein entsprechender
     *  Parameter gesetzt ist. Es erfolgt keine zusaetzliche 
     *  Ueberpruefung der Parameter, da dies bereits im Konstruktor
     *  der Klasse <code>BinomialCoefficient</code> abgefangen wird.
     *  @param n Parameter n fuer den Binomialkoeffizienten
     *  @param k Parameter k fuer den Binomialkoeffizienten
     *  @param print Zusaetzliche Informationen werden genau dann
     *         ausgegeben, wenn dieser Parameter den Wert <code>true</code> hat.
     *  @return <code>true</code>, falls die Ergebnisse uebereinstimmen,
     *          <code>false</code> sonst.
     */
    public boolean testEval(int n, int k, boolean print) {

	boolean passed = true;

	int vergleichswert = /* Hier korrekt ausfuellen */  0;
	int wert           = /* Hier korrekt ausfuellen */  1;

	if (wert != vergleichswert) {
	    System.out.println("testEval(" + n + "," + k + ") "
			       + "ergab " + wert + " an Stelle von " 
			       + vergleichswert + "."); 
	    passed = false;
	}

	return passed;

    }

    /*
      Es duerfen weitere Methoden ergaenzt werden.
     */

    /**
     *  Ueberprueft verschiedene Grenzfaelle der Implementierung.
     */
    public void run() {

	boolean passed = true;
	boolean passedAll = true;

	passed = passed && testEval(10,5,true);
	passedAll = passedAll && passed;

	passed = passed && testEval(9,9,true);
	passedAll = passedAll && passed;

	passed = passed && testEval(5,3,true);
	passedAll = passedAll && passed;

	if (passedAll) {
	    System.out.println("*** Alle Tests bestanden: " + passedAll);
	}
	else {
	    System.out.println("*** Nicht alle Tests bestanden: " + passedAll);
	}
    }


    public static void main(String[] args) {
	RecursionlessBinomialCoefficient rbc = new RecursionlessBinomialCoefficient();
	rbc.run();	
    }
}
